#include "mainwindow.h"
#include "ui_mainwindow.h"
#include "LVGL_API.h"

void timer0_callback(void * pCBParam,uint32_t Event,void * pArg)
{
    lv_tick_inc(1);
}

void timer1_callback(void * pCBParam,uint32_t Event,void * pArg)
{
    lv_timer_handler();
}

void button_evnet(lv_event_t * event)
{
    qDebug()<<event->code;

    lv_obj_t *btn = lv_event_get_target(event);                    // 获得调用这个回调函数的对象
    if (event->code == LV_EVENT_CLICKED)
    {
        static uint8_t cnt = 0;
        cnt++;
        lv_obj_t *label = lv_obj_get_child(btn, NULL);             // 获取第1个子对象(我们在设计时，已安排了它的第1个子对象是一个label对象)
        lv_label_set_text_fmt(label, "Button: %d", cnt);           // 设置标签的文本，写法类似printf
    }
}

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    this->ui->widget->setMinimumSize(800,600);
    drawWidget =new MY_Display(this->ui->widget); //新建一个 DrawWidget 对象
    //setCentralWidget(drawWidget); //新建的 DrawWidget 对象作为主窗口的中央窗体
    // setMinimumSize(600,400);     //设置主窗口的最小尺寸
    Init_LVGL_API(this->drawWidget);

    Timer0 = new MY_Timer(timer0_callback,1,true);
    Timer1 = new MY_Timer(timer1_callback,5,true);

    lv_init();                             // LVGL 初始化
    lv_port_disp_init();                   // 注册LVGL的显示任务
    lv_port_indev_init();                  // 注册LVGL的触屏检测任务

    Timer0->Start_Timer();
    Timer1->Start_Timer();

    //按钮
    lv_obj_t *myBtn = lv_btn_create(lv_scr_act());                               // 创建按钮; 父对象：当前活动屏幕
    lv_obj_set_pos(myBtn, 10, 10);                                               // 设置坐标
    lv_obj_set_size(myBtn, 120, 50);                                             // 设置大小

    lv_obj_add_event_cb(myBtn, button_evnet, LV_EVENT_CLICKED, NULL); //添加事件

    // 按钮上的文本
    lv_obj_t *label_btn = lv_label_create(myBtn);                                // 创建文本标签，父对象：上面的btn按钮
    lv_obj_align(label_btn, LV_ALIGN_CENTER, 0, 0);                              // 对齐于：父对象
    lv_label_set_text(label_btn, "Test");                                        // 设置标签的文本

    // 独立的标签
    lv_obj_t *myLabel = lv_label_create(lv_scr_act());                           // 创建文本标签; 父对象：当前活动屏幕
    lv_label_set_text(myLabel, "Hello world!");                                  // 设置标签的文本
    lv_obj_align(myLabel, LV_ALIGN_CENTER, 0, 0);                                // 对齐于：父对象
    lv_obj_align_to(myBtn, myLabel, LV_ALIGN_OUT_TOP_MID, 0, -20);               // 对齐于：某对象
}


MainWindow::~MainWindow()
{
    Timer0->Stop_Timer();
    Timer1->Stop_Timer();
    delete ui;
}


void MainWindow::on_pushButton_clicked()
{
    emit drawWidget->goto_setBack(Qt::green);

    qDebug()<<this->ui->widget->width();
    qDebug()<<this->ui->widget->height();

    QRectF textRect(10, 10, 200, 100);
    emit drawWidget->goto_drawText(textRect,"asd");

    QPoint p1(0,0);
    QPoint p2(100,100);
    emit drawWidget->goto_fillRect(p1,p2);
}

